public class Leecode21 {
    public class ListNode {
        int val;
        ListNode next;
        ListNode() {}
        ListNode(int val) { this.val = val; }
        ListNode(int val, ListNode next) { this.val = val; this.next = next; }
    }


        public static void main(String[] args) {

        }
}
class Solution {
    public ListNode mergeTwoLists(ListNode l1, ListNode l2) {
        // 创建一个头节点 prehead，并初始化为值为 -1
        ListNode prehead = new ListNode(-1);

        // 将 prev 指向 prehead，用于构建新链表
        ListNode prev = prehead;

        // 循环条件：当 l1 和 l2 都不为 null 时
        while (l1 != null && l2 != null) {
            // 比较 l1 和 l2 当前节点的值
            if (l1.val <= l2.val) {
                // 如果 l1 的值小于等于 l2 的值，将 prev 的 next 指向 l1，并将 l1 向后移动一位
                prev.next = l1;
                l1 = l1.next;
            } else {
                // 如果 l2 的值小于 l1 的值，将 prev 的 next 指向 l2，并将 l2 向后移动一位
                prev.next = l2;
                l2 = l2.next;
            }
            // 将 prev 指向新链表的最后一个节点
            prev = prev.next;
        }

        // 合并后 l1 和 l2 最多只有一个还未被合并完，我们直接将链表末尾指向未合并完的链表即可
        prev.next = l1 == null ? l2 : l1;

        // 返回合并后的链表，prehead.next 是新链表的头节点
        return prehead.next;
    }
}

